package com.zmm.zebulon.starter.biz.data.permission.core.annotation;

import com.zmm.zebulon.starter.biz.data.permission.core.rule.DataPermissionRule;

import java.lang.annotation.*;

/**
 * description: 数据权限注解<br>
 * 可声明在类或者方法上，标识使用的数据权限规则
 *
 * @author zebulon
 * package com.zmm.zebulon.starter.biz.data.permission.core.annotation
 * name: DataPermission
 * date 2024/1/8 23:12
 */
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataPermission {

    /**
     * 当前类或方法是否开启数据权限
     * 即使不添加 @DataPermission 注解，默认是开启状态
     * 可通过设置 enable 为 false 禁用
     */
    boolean enable() default true;

    /**
     * 生效的数据权限规则数组，优先级高于 {@link #excludeRules()}
     */
    Class<? extends DataPermissionRule>[] includeRules() default {};

    /**
     * 排除的数据权限规则数组，优先级最低
     */
    Class<? extends DataPermissionRule>[] excludeRules() default {};

}

